#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>


int count = 0;
void* Routine(void* arg)
{
	while (1)
    {
		count++;
		sleep(1);
	}
}
int main()
{
	pthread_t tid;
	pthread_create(&tid, NULL, Routine, NULL);
	while (1)
    {
		printf("count: %d\n", count);
		sleep(1);
	}
	pthread_join(tid, NULL);
	return 0;
}


// void* Routine(void* arg)
// {
// 	while(1)
// 	{
// 		printf("new thread tid: %p\n",pthread_self());
// 		sleep(2);
// 	}
// }
// int main()
// {
// 	pthread_t tid;
// 	pthread_create(&tid,NULL,Routine,NULL);
// 	while(1)
// 	{
// 		printf("main thread tid: %p\n", pthread_self());
// 		sleep(2);
// 	}
// 	return 0;
// }
// void* Routine(void* arg)
// {
// 	pthread_detach(pthread_self());
// 	char* msg = (char*)arg;
// 	int count = 0;
// 	while (count < 5)
// 	{
// 		printf("I am %s...pid: %d, ppid: %d, tid: %lu\n", msg, getpid(), getppid(), pthread_self());
// 		sleep(1);
// 		count++;
// 	}
// 	pthread_exit((void*)1111);
// }
// int main()
// {
// 	pthread_t tid[5];
// 	int i = 0;
// 	for (; i < 5; i++)
// 	{
// 		char* buffer = (char*)malloc(64);
// 		sprintf(buffer, "thread %d", i);
// 		pthread_create(&tid[i], NULL, Routine, buffer);
// 		printf("%s tid is %lu\n", buffer, tid[i]);
// 	}
// 	while (1)
// 	{
// 		printf("I am main thread...pid: %d, ppid: %d, tid: %lu\n", getpid(), getppid(), pthread_self());
// 		sleep(1);
// 	}
// 	return 0;
// }
// pthread_t main_thread; //全局变量

// void* Routine(void* arg)
// {
// 	char* msg = (char*)arg;
// 	int count = 0;
// 	while (count < 5)
// 	{
// 		printf("I am %s...pid: %d, ppid: %d, tid: %lu\n", msg, getpid(), getppid(), pthread_self());
// 		sleep(1);
// 		count++;
// 		pthread_cancel(main_thread);
// 	}
// 	pthread_exit((void*)1111);
// }
// int main()
// {
// 	main_thread = pthread_self();	
// 	pthread_t tid[5];
// 	int i = 0;
// 	for ( ;i < 5; i++)
// 	{
// 		char* buffer = (char*)malloc(64);
// 		sprintf(buffer, "thread %d", i);
// 		pthread_create(&tid[i], NULL, Routine, buffer);
// 		printf("%s tid is %lu\n", buffer, tid[i]);
// 	}
// 	printf("I am main thread...pid: %d, ppid: %d, tid: %lu\n", getpid(), getppid(), pthread_self());
// 	i = 0;
// 	for (; i < 5; i++)
// 	{
// 		void* ret = NULL;
// 		pthread_join(tid[i], &ret);
// 		printf("thread %d[%lu]...quit, exitcode: %d\n", i, tid[i], (int)ret);
// 	}
// 	return 0;
// }
// void* Routine(void* arg)
// {
// 	char* msg = (char*)arg;
// 	int count = 0;
// 	while (count < 5)
// 	{
// 		printf("I am %s...pid: %d, ppid: %d, tid: %lu\n", msg, getpid(), getppid(), pthread_self());
// 		sleep(1);
// 		count++;
// 	}
// 	pthread_exit((void*)1111);
// }
// int main()
// {
// 	pthread_t tid[5];
// 	int i = 0;
// 	for (; i < 5; i++)
// 	{
// 		char* buffer = (char*)malloc(64);
// 		sprintf(buffer, "thread %d", i);
// 		pthread_create(&tid[i], NULL, Routine, buffer);
// 		printf("%s tid is %lu\n", buffer, tid[i]);
// 	}
// 	//取消0~3号线程
// 	pthread_cancel(tid[0]);
// 	pthread_cancel(tid[1]);
// 	pthread_cancel(tid[2]);
// 	pthread_cancel(tid[3]);
// 	printf("I am main thread...pid: %d, ppid: %d, tid: %lu\n", getpid(), getppid(), pthread_self());
// 	i = 0;
// 	for (; i < 5; i++)
// 	{
// 		void* ret = NULL;
// 		pthread_join(tid[i], &ret);
// 		printf("thread %d[%lu]...quit, exitcode: %d\n", i, tid[i], (int)ret);
// 	}
// 	return 0;
// }
// void* Routine(void* arg)
// {
// 	char* msg = (char*)arg;
// 	while (1)
// 	{
// 		printf("I am %s...pid: %d, ppid: %d, tid: %lu\n", msg, getpid(), getppid(), pthread_self());
// 		sleep(1);
// 	}
// 	return (void*)0;
// }
// int main()
// {
// 	pthread_t tid[5];
// 	int i = 0;
// 	for (; i < 5; i++)
// 	{
// 		char* buffer = (char*)malloc(64);
// 		sprintf(buffer, "thread %d", i);
// 		pthread_create(&tid[i], NULL, Routine, buffer);
// 		printf("%s tid is %lu\n", buffer, tid[i]);
// 	}
// 	printf("I am main thread...pid: %d, ppid: %d, tid: %lu\n", getpid(), getppid(), pthread_self());

// 	return 0;
// }
// void* Run(void* arg)
// {
//     char* msg = (char*)arg;
//     int count = 2;
//     while(count--)
//     {
//         printf("hello thread %s,..... pid:%d ppid:%d,tid:%lu\n",msg,getpid(),getppid(),pthread_self());
//         sleep(1);   
//     }
// }
// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, NULL, Run, (void*)"1");//创建新线程
	
//     pthread_join(tid,NULL);//等待的线程ID是tid
//     printf("thread tid:%lu...quit\n", tid);
//     return 0;
// }